package org.jet.emall.prod.service;

import org.jet.emall.common.restful.result.CommonPage;
import org.jet.emall.prod.dto.*;

import java.util.List;

/**
 * @author xiaozai
 * @version 1.0
 * @date 2020-04-15 10:01
 */
public interface CustomProductService {

    /**
     *    分页查找SPU
     * @param query
     * @param pageNum
     * @param pageSize
     * @param brandQuery
     * @param cateId
     * @param banSale
     * @return
     */
    CommonPage<SpuViewDTO> spuPage(String query, Integer pageNum, Integer pageSize, String brandQuery, Integer cateId, Byte banSale);

    /**
     *   根据code查SPU
     * @param spuCode
     * @return
     */
    SpuViewDTO findSpuByCode(String spuCode);

    /**
     *  保存新的SPU
     * @param newSpuDTO
     */
    void saveSpu(NewSpuDTO newSpuDTO);

    /**
     *  上架或下架商品
     * @param spuIds
     * @param banSale
     */
    void banSale(List<Long> spuIds, Byte banSale);

    /**
     *  删除SPU
     * @param idList
     */
    void deleteSpu(List<Long> idList);

    /**
     *  删除SKU
     * @param idList
     */
    void deleteSku(List<Long> idList);

    /**
     *  获取SKU详情
     * @param id
     * @return
     */
    SkuDetailsDTO getSkuDetails(Long id);

    /**
     *  更新SKU 详情
     * @param dto
     */
    void updateSkuDetails(SkuDetailsDTO dto);

    /**
     *  获取SPU的所有SKU
     * @param spuId
     * @return
     */
    List<SkuDTO> listSkusOfSpu(Long spuId);

    /**
     *  保存新建的SKU
     * @param dto
     */
    void saveSku(NewSkuDTO dto);

    /**
     *  获取SPU的图片
     * @param spuId
     * @return
     */
    List<SpuImageDTO> getSpuImages(Long spuId);

    /**
     *  获取 SKU的图片列表
     * @param skuId
     * @return
     */
    List<SkuImageDTO> getSkuImages(Long skuId);

    /**
     *  删除SPU的图片
     * @param id
     */
    void deleteSpuImages(Long id);


    /**
     *  保存SPU图片
     * @param dto
     */
    void saveSpuImage(SpuImageDTO dto);

    /**
     *  保存SKU图片
     * @param dto
     */
    void saveSkuImage(SkuImageDTO dto);

    /**
     *  更新SKU的价格
     * @param skuId
     * @param price
     */
    void updateSkuPrice(Long skuId, Long price);

    /**
     *  删除SKU的图片
     * @param id
     */
    void deleteSkuImage(Long id);

    /**
     *  更新SKU名称
     * @param skuId
     * @param name
     */
    void updateSkuName(Long skuId, String name);

    /**
     *  更新SKU的库存数量
     * @param skuId
     * @param count
     */
    void updateSkuCount(Long skuId, Integer count);
}
